Memristors are devices that can be programmed to different resistive states by applying a programming energy, for example, a voltage or current pulse. The programming energy generates a combination of electric field thermal effects, and potentially other effects that are to modulate the conductivity of both non-volatile switch and non-linear select functions in a switching element. After programming, the state of the memristor remains stable over a specified time period and the state is thus readable. Memristor elements can be used in a variety of applications, including non-volatile solid state memory, programmable logic, signal processing, control systems, pattern recognition, and other applications.